package OperationSystem.day1202.singleton;

//懒汉模式:延时加载模式
//需要的时候才进行初始化
//好处：如果不是一开始就需要，就没必要一开始分配资源
//缺点：会使情况变得非常复杂(出现bug的几率变大)
public class Lazying {
    private static Lazying instance =null;
    /*public static Lazying getInstance(){//版本1
        if (instance==null){//线程不安全，这一步破坏了原子性
            instance=new Lazying();
        }
        return instance;
    }*/

    /*public synchronized static Lazying getInstance(){//版本2
        if (instance==null){//线程安全,但性能低，如果执行10000次，就会有10000次的抢锁过程
            instance=new Lazying();
        }
    return instance;
    }*/

    //要点1：二次判断   要点2：instance=new Lazying()的过程可能会重排序，引起问题
    public static Lazying getInstance(){//版本3
        if (instance==null){
            synchronized (Lazying.class){
                if (instance==null){//经过二次判断
                    instance=new Lazying();
                }
            }
        }
    }
    private Lazying(){

    }
}
